﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using FacturacionII.Modelo;
using FacturacionII.Interfaces;

namespace FacturacionII.Clases
{
    class clsUsuarios 
    {
        facturacionEntities objUsuarios;

        public clsUsuarios() { }
       
        public ArrayList CargarDatosGridView()
        {        
            ArrayList lista = new ArrayList();
            objUsuarios = new facturacionEntities();
            var query = from u in objUsuarios.usuarios
                        join c in objUsuarios.configuracion on u.id equals c.id
                        join p in objUsuarios.personas on u.id_persona equals p.id
                        join n in objUsuarios.nivel on u.id_nivel equals n.id
                        orderby u.usuario ascending
                        select new
                        {
                            CODIGO = u.id,
                            USUARIO = u.usuario,
                            CONTRASENA = u.contrasena,
                            ID_NIVEL = u.id_nivel,
                            NIVEL = n.descripcion,
                            ID_CONFIGURACION = u.id_configuracion,
                            CONFIGURACION = c.razon_social,
                            ID_PERSONA = p.id,
                        };

            foreach (var datos in query)
            {
                lista.Add(datos);
            }
            return lista;
        }

        public ArrayList BuscarDatosGridView(string usuario)
        {            
            ArrayList lista = new ArrayList();
            objUsuarios = new facturacionEntities();
            var query = from u in objUsuarios.usuarios
                        join c in objUsuarios.configuracion on u.id equals c.id
                        join p in objUsuarios.personas on u.id_persona equals p.id
                        join n in objUsuarios.nivel on u.id_nivel equals n.id
                        where u.usuario.Contains(usuario)
                        select new
                        {
                            CODIGO = u.id,
                            USUARIO = u.usuario,
                            CONTRASENA = u.contrasena,
                            ID_NIVEL = u.id_nivel,
                            NIVEL = n.descripcion,
                            ID_CONFIGURACION = u.id_configuracion,
                            CONFIGURACION = c.razon_social,
                            ID_PERSONA = p.id,
                        };

            foreach (var datos in query)
            {
                lista.Add(datos);
            }
            return lista;
        }

        public void Guardar(string usuarios, string password, int nivel, int configuracion,
            int persona)
        {
            objUsuarios = new facturacionEntities();
            usuarios usuario = new usuarios
            {
                usuario = usuarios,
                contrasena = password,
                id_nivel = nivel,
                id_configuracion = configuracion,
                id_persona = persona
            };
            objUsuarios.AddTousuarios(usuario);
            objUsuarios.SaveChanges();
        }

        public void GuardarCambios(int id, string password, int nivel, 
            int configuracion, int persona)
        {
            objUsuarios = new facturacionEntities();
            usuarios usuario = objUsuarios.usuarios.FirstOrDefault(
                u=>u.id == id);

            usuario.contrasena = password;
            usuario.id_nivel = nivel;
            usuario.id_configuracion = configuracion;
            usuario.id_persona = persona;

            objUsuarios.SaveChanges();
            
        }

        public void Eliminar(int id)
        {
            objUsuarios = new facturacionEntities();
            usuarios usuario = objUsuarios.usuarios.FirstOrDefault(
                u => u.id == id);

            objUsuarios.DeleteObject(usuario);
            objUsuarios.SaveChanges();
        }

        public ArrayList CargarComboBox()
        {
            ArrayList lista = new ArrayList();
            objUsuarios = new facturacionEntities();
            var query = from u in objUsuarios.usuarios
                        orderby u.usuario
                        select new
                        {
                            CODIGO = u.id,
                            USUARIO = u.usuario,
                        };

            foreach (var datos in query)
            {
                lista.Add(datos);
            }
            return lista;
        }
    }
}
